# CMake 脚本：保存安装清单文件
# 在安装后执行，将 install_manifest.txt 复制到安装目录，以便后续版本检查和卸载使用
# 注意：此文件通过 configure_file 生成，@CMAKE_CURRENT_BINARY_DIR@ 会被替换

# 获取安装前缀
if(DEFINED CMAKE_INSTALL_PREFIX)
    set(INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
else()
    set(INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
    if(INSTALL_PREFIX STREQUAL "")
        set(INSTALL_PREFIX "/usr/local")
    endif()
endif()

# 构建目录中的 manifest 文件（尝试多个可能的位置）
set(BUILD_MANIFEST "")
if(DEFINED CMAKE_CURRENT_BINARY_DIR)
    set(BUILD_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt")
else()
    # 使用配置时的构建目录
    set(BUILD_MANIFEST "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
endif()

# 安装目录中的 manifest 文件
set(INSTALL_MANIFEST_DIR "${INSTALL_PREFIX}/lib/cmake/tools")
set(INSTALL_MANIFEST "${INSTALL_MANIFEST_DIR}/install_manifest.txt")

# 如果构建目录中存在 manifest 文件，则复制到安装目录
if(EXISTS "${BUILD_MANIFEST}")
    # 确保安装目录存在
    file(MAKE_DIRECTORY "${INSTALL_MANIFEST_DIR}")
    
    # 复制 manifest 文件
    file(COPY "${BUILD_MANIFEST}" DESTINATION "${INSTALL_MANIFEST_DIR}")
    message(STATUS "已保存安装清单文件到: ${INSTALL_MANIFEST}")
else()
    # 如果构建目录中没有 manifest，尝试手动生成一个
    # 收集已安装的文件并写入 manifest
    message(STATUS "构建目录中未找到 install_manifest.txt，尝试手动生成...")
    
    # 确保安装目录存在
    file(MAKE_DIRECTORY "${INSTALL_MANIFEST_DIR}")
    
    # 手动收集安装的文件
    set(MANIFEST_CONTENT "")
    
    # 库文件
    if(EXISTS "${INSTALL_PREFIX}/lib/libtools.a")
        string(APPEND MANIFEST_CONTENT "${INSTALL_PREFIX}/lib/libtools.a\n")
    endif()
    
    # CMake 配置文件
    if(EXISTS "${INSTALL_PREFIX}/lib/cmake/tools/toolsConfig.cmake")
        string(APPEND MANIFEST_CONTENT "${INSTALL_PREFIX}/lib/cmake/tools/toolsConfig.cmake\n")
    endif()
    if(EXISTS "${INSTALL_PREFIX}/lib/cmake/tools/toolsConfigVersion.cmake")
        string(APPEND MANIFEST_CONTENT "${INSTALL_PREFIX}/lib/cmake/tools/toolsConfigVersion.cmake\n")
    endif()
    if(EXISTS "${INSTALL_PREFIX}/lib/cmake/tools/toolsTargets.cmake")
        string(APPEND MANIFEST_CONTENT "${INSTALL_PREFIX}/lib/cmake/tools/toolsTargets.cmake\n")
    endif()
    
    # 头文件（递归收集）
    if(EXISTS "${INSTALL_PREFIX}/include/tools")
        file(GLOB_RECURSE HEADER_FILES "${INSTALL_PREFIX}/include/tools/*")
        foreach(HEADER ${HEADER_FILES})
            string(APPEND MANIFEST_CONTENT "${HEADER}\n")
        endforeach()
    endif()
    
    # 写入 manifest 文件
    if(MANIFEST_CONTENT)
        file(WRITE "${INSTALL_MANIFEST}" "${MANIFEST_CONTENT}")
        message(STATUS "已生成安装清单文件到: ${INSTALL_MANIFEST}")
    endif()
endif()

